package thread;
//juc:java.util.concurrent  concurrent并发 Java并发包
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程池
 * 线程的管理机制,主要解决两方面问题
 * 1.重复使用线程
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //创建具有2条线程的线程池
        ExecutorService threadPool= Executors.newFixedThreadPool(3);

        for (int i = 0; i < 5; i++) {
//            Runnable r = new Runnable() {
//                @Override
//                public void run() {
            Runnable r = ()->{
            try {
                        Thread t = Thread.currentThread();
//                    System.out.println(Thread.currentThread().getName());
                        System.out.println(t.getName()+"正在执行一个任务....");
                        Thread.sleep(5000);
                        System.out.println(t.getName()+"执行完毕");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
            };
            threadPool.execute(r);
            System.out.println("将一个任务交给了线程池");
        }
        //线程池不再接受新任务，线程池内部任务都执行完毕后结束
//        threadPool.shutdown();//停止线程池
        //线程池会立即调用
        threadPool.shutdownNow();// 立即停止线程池
        System.out.println("停止线程池");

    }
}
//程序不退出：当进程中所有的线程都结束了，进程才会退出--->解决不结束